import axios from 'axios'
import router from '../router';

// 创建axios实例
const request = axios.create({
    baseURL: '/api',// 所有的请求地址前缀部分(没有后端请求不用写)
    timeout: 80000, // 请求超时时间(毫秒)
    withCredentials: true,// 异步请求携带cookie
    headers: {
        // 设置后端需要的传参类型
        'Content-Type': 'application/json',
        'token': 'x-auth-token',
        'X-Requested-With': 'XMLHttpRequest',
    },
})

// request拦截器
request.interceptors.request.use(
    config => {
    //   // 如果你要去localStorage获取token(如果你有)
    //   let token = localStorage.getItem("x-auth-token");
    //   if (token) {
    //     // 添加请求头
    //     config.headers["Authorization"] = "Bearer " + token;
    //   }
    
      return config;
    },
    error => {
      // 对请求错误做些什么
      Promise.reject(error);
    }
  );
  
  
// response 拦截器
request.interceptors.response.use(
    response => {
        // 对响应数据做点什么
        const newToken = response.headers['newtoken'];
        // 如果响应头中存在新令牌，则保存到本地存储中
        if (newToken) {
            localStorage.setItem("x-auth-token", newToken)
        }
        return response.data
    },
    error => {
        // 对响应错误做点什么
        errorHandle(error.data.code, error.data.message);
        return Promise.reject(error)
    }
)

const errorHandle = (status: any, other: any) => {
    // 状态码判断
    switch (status) {
        // 401: 未登录状态，跳转登录页
        case 401:
            ElMessage.error('未登录')

            setTimeout(() => {
                toLogin();
            }, 1000);
            break;
        // 403 服务器拒绝执行请求
        case 403:
            ElMessage.error('服务器拒绝执行请求')
            break;
        // 404请求不存在
        case 404:
            ElMessage.error('请求的资源不存在')
            break;
        default:
            ElMessage.error(other)
    }
}

/** 
 * 跳转登录页
 * 携带当前页面路由，以期在登录页面完成登录后返回当前页面
 */
const toLogin = () => {
    router.replace({
        path: '/login',
        query: {
            redirect: router.currentRoute.value.fullPath
        }
    });
}
export default request